home *** CD-ROM | disk | FTP | other *** search
Wrap
startFall = function() { timeout = setInterval(down,speed); }; stopFall = function() { clearInterval(timeout); }; drawBlock = function(num, blockPos) { b_mc[blockPos].gotoAndStop(num + 1); }; drawNextBlock = function(num, blockPos) { next_mc[blockPos].gotoAndStop(num + 1); }; drawThisShape = function() { if(moved) { var i = 0; while(i < 4) { drawBlock(0,block_array[i]); i++; } } else { moved = true; } var i = 0; while(i < 4) { blockPos = shape_array[thisShape * 16 + rotation * 4 + i]; block_array[i] = (blockPos >> 2) * 6 + blockPos + xPos + yPos; drawBlock(thisShape + 1,block_array[i]); i++; } }; drawNextShape = function() { nextShape = int(Math.random() * 7); var i = 0; while(i < 11) { drawNextBlock(0,i); i++; } var i = 0; while(i < 4) { drawNextBlock(nextShape + 1,shape_array[nextShape * 16 + i]); i++; } }; collision = function(x, y, rot) { var i = 0; while(i < 4) { blockPos = shape_array[thisShape * 16 + rot * 4 + i]; if(flag_array[(blockPos >> 2) * 6 + blockPos + x + y] != 0) { return true; } i++; } return false; }; left = function() { var i = 0; while(i < 4) { var x = block_array[i] - yPos; while(x >= 0) { if(x == 0) { return undefined; } x -= 10; } i++; } if(!collision(xPos - 1,yPos,rotation)) { xPos--; drawThisShape(); } }; right = function() { var i = 0; while(i < 4) { var x = block_array[i] - yPos; while(x >= 0) { if(x == 9) { return undefined; } x -= 10; } i++; } if(!collision(xPos + 1,yPos,rotation)) { xPos++; drawThisShape(); } }; rotate = function(clockwise) { testRot = rotation; if(clockwise) { testRot++; } else { testRot--; } if(testRot == 4) { testRot = 0; } else if(testRot == -1) { testRot = 3; } var i = 0; while(i < 4) { blockPos = shape_array[thisShape * 16 + testRot * 4 + i]; var x = (blockPos >> 2) * 6 + blockPos + xPos; while(x >= -1) { if(x == -1 && xPos < 0 || x == 0 && xPos > 6) { return undefined; } x -= 10; } i++; } if((blockPos >> 2) * 6 + blockPos + xPos + yPos > 179) { return undefined; } if(!collision(xPos,yPos,testRot)) { rotation = testRot; drawThisShape(); sound_mc.gotoAndPlay("popHi"); } }; down = function() { if(gameOver || simult) { return undefined; } score++; if(block_array[3] - xPos < 170 && !collision(xPos,yPos + 10,rotation)) { yPos += 10; drawThisShape(); } else { var i = 0; while(i < 4) { flag_array[block_array[i]] = thisShape + 1; i++; } simult = 0; var y = 0; while(y < 180) { var x = 0; while(x < 10) { if(flag_array[x + y] == 0) { break; } if(x == 9) { stopFall(); var i = 0; while(i < 10) { b_mc[i + y].bang_mc.y = y; b_mc[i + y].bang_mc.play(); i++; } simult++; lines++; } x++; } y += 10; } if(simult) { sound_mc.gotoAndPlay("win"); switch(simult) { case 1: score += level * 40; break; case 2: score += level * 100; break; case 3: score += level * 300; break; case 4: score += level * 1200; } } scoreTxt = String(score).addCommas(); if(collision(xPos,yPos,rotation) && yPos == -10) { gameOver = true; stopFall(); sound_mc.gotoAndPlay("end"); quitGame_mc.gotoAndStop(2); quitGame_mc._visible = true; } else { level = int(lines / 10) + startLevel; speed = level >= 10 ? 100 : 600 - level * 50; xPos = 3; yPos = -10; rotation = 0; moved = false; thisShape = nextShape; if(!simult) { drawNextShape(); drawThisShape(); sound_mc.gotoAndPlay("popLo"); } } } updateAfterEvent(); }; keyListener = new Object(); keyListener.onKeyDown = function() { if(gameOver || simult) { return undefined; } var keyCode = Key.getCode(); switch(keyCode) { case 80: pause_btn.onPress(); break; case 81: quit_btn.onPress(); } if(!paused) { switch(keyCode) { case Key.LEFT: left(); break; case Key.RIGHT: right(); break; case Key.DOWN: _root.onEnterFrame = down; break; case Key.UP: case 88: rotate(true); break; case 90: rotate(false); } } updateAfterEvent(); }; keyListener.onKeyUp = function() { delete _root.onEnterFrame; }; Key.addListener(keyListener); gameOver = true; paused = moved = false; score = scoreTxt = lines = thisShape = nextShape = rotation = 0; level = startLevel; speed = level >= 10 ? 100 : 600 - level * 50; xPos = 3; yPos = -10; shape_array = new Array(5,6,9,10,5,6,9,10,5,6,9,10,5,6,9,10,4,5,6,9,1,4,5,9,1,4,5,6,1,5,6,9,4,5,9,10,2,5,6,9,4,5,9,10,2,5,6,9,5,6,8,9,1,5,6,10,5,6,8,9,1,5,6,10,4,5,6,8,0,1,5,9,2,4,5,6,1,5,9,10,4,5,6,10,1,5,8,9,0,4,5,6,1,2,5,9,4,5,6,7,1,5,9,13,4,5,6,7,1,5,9,13); block_array = new Array(0,0,0,0); flag_array = new Array(); var i = 18; while(i >= 0) { var j = 0; while(j < 10) { var k = i * 10 + j; b_mc.attachMovie("block",k,k,{_x:j * 20,_y:i * 20}); flag_array[k] = 0; j++; } i--; } var i = 0; while(i < 3) { var j = 0; while(j < 4) { var k = i * 4 + j; next_mc.attachMovie("block",k,k,{_x:j * 20,_y:i * 20}); j++; } i++; }